
package com.xc.hotelmgr.order.common.utils;


/**
 * 常量
 *
 * @author kemmy
 */
public class Constant {

    /** 超级管理员ID */
    public static final int SUPER_ADMIN = 1;
    /**
     * 当前页码
     */
    public static final String PAGE = "page";
    /**
     * 每页显示记录数
     */
    public static final String LIMIT = "limit";
    /**
     * 排序字段
     */
    public static final String ORDER_FIELD = "sidx";
    /**
     * 排序方式
     */
    public static final String ORDER = "ord";
    /**
     *  升序
     */
    public static final String ASC = "asc";

    /**
     * 阿里飞猪订单路由
     */
    public enum AliOrderRouter {
        /**
         * 验证价格
         */
        ValidateRQ("ValidateRQ"),
        /**
         * 支付成功通知
         */
        PaySuccessRQ("PaySuccessRQ"),
        /**
         * 预定
         */
        BookRQ("BookRQ"),
        /**
         * 查询订单
         */
        QueryStatusRQ("QueryStatusRQ"),

        /**
         * 申请退款通知
         */
        OrderRefundRQ("OrderRefundRQ"),

        /**
         * 申请退款通知
         */
        CancelRQ("CancelRQ");

        private String value;

        AliOrderRouter(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }

    /**
     * 订单状态
     */
    public enum MtOrderStatus {
        book_suc(21, "预订成功"),
        book_fail(22, "预订失败"),
        cancel_suc(31, "取消成功"),
        abort(40, "美团客服介入退款"),
        book_checkin(50, "已入住");

        private int value;
        private String desc;

        MtOrderStatus(int value, String desc) {
            this.value = value;
            this.desc = desc;
        }

        public int getValue() {
            return value;
        }

        public String getDesc() {
            return desc;
        }

        /**
         * 通过value取枚举
         *
         * @param value
         * @return
         */
        public static MtOrderStatus getStatusByValue(Integer value) {
            if (value == null) {
                return null;
            }
            int valueKey = value;
            for (MtOrderStatus enums : MtOrderStatus.values()) {
                if (enums.getValue() == valueKey) {
                    return enums;
                }
            }
            return null;
        }

        /**
         * 通过value取描述
         *
         * @param value
         * @return
         */
        public static String getDescByValue(int value) {
            for (MtOrderStatus enums : MtOrderStatus.values()) {
                if (enums.getValue() == value) {
                    return enums.getDesc();
                }
            }
            return "";
        }
    }


    /**
     * 渠道（rpCode:前两位是整数为美团，-1为携程，-2为美团商旅，中间包含 XC 为自定义价格政策）
     */
    public static final String ChanelCtrip = "-1";  // 数据来源携程
    public static final String ChanelCustomStr = "XC"; // 自定义价格政策标识
    public static final String ChanelMtBuisness = "-2"; // 数据来源美团商旅
    public static final String ChanelYd = "-3";
    public static final String ChanelZy = "XRK";

    /**
     * 渠道：
     * 1:携程
     * 2：美团
     * 3：人工
     * 4:其他
     * 5:美团商旅
     * 6：亚朵
     */
    public enum Channel {
        /**
         * 携程
         */
        Ctrip(1),
        /**
         * 美团
         */
        Mt(2),
        /**
         * 人工
         */
        Manual(3),
        /**
         * 其他
         */
        Other(4),
        /**
         * 美团商旅
         */
        MtB(5),

        /**
         * 亚朵
         */
        Yd(6);

        private Integer value;

        /**
         * 通过value取枚举
         *
         * @param value
         * @return
         */
        public static Channel getChannelByValue(Integer value) {
            if (value == null) {
                return null;
            }
            int valueKey = value;
            for (Channel enums : Channel.values()) {
                if (enums.getValue() == valueKey) {
                    return enums;
                }
            }
            return null;
        }

        Channel(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
    }

    /**
     * 订单发货,操作的类型：1.确认无房（取消预订，710发送短信提醒买家申请退款）2.确认预订 3.入住 4.离店 5.noshow 6.关单
     */
    public enum OptType {
        /**
         * 确认无房
         */
        NoRoom(1),
        /**
         * 确认预订
         */
        Confirm(2),
        /**
         * 关单
         */
        Close(6);


        private Integer value;

        OptType(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }

        /**
         * 通过value取枚举
         *
         * @param value
         * @return
         */
        public static OptType getOptTypeByValue(Integer value) {
            if (value == null) {
                return null;
            }
            int valueKey = value;
            for (OptType enums : OptType.values()) {
                if (enums.getValue() == valueKey) {
                    return enums;
                }
            }
            return null;
        }
    }

    /**
     * 本地订单状态
     * 1 未支付（来单就是已经支付了，暂时没有）， 2已支付，3已发货 4 申请退款 5 已退款
     */
    public enum LocalOrderStatus {
        /**
         * 未支付
         */
        Unpaid(1),
        /**
         * 已支付
         */
        Paid(2),
        /**
         * 已发货
         */
        Delivered(3),

        /**
         * 申请退款
         */
        ApplyRefund(-1),

        /**
         * 已退款
         */
        Refund(-2),

        /**
         * 已入住
         */
        CheckIn(4),

        /**
         * 关单
         */
        Close(-3);


        private Integer value;

        LocalOrderStatus(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
        /**
         * 通过value取枚举
         *
         * @param value
         * @return
         */
        public static LocalOrderStatus getLocalOrderStatusByValue(Integer value) {
            if (value == null) {
                return null;
            }
            int valueKey = value;
            for (LocalOrderStatus enums : LocalOrderStatus.values()) {
                if (enums.getValue() == valueKey) {
                    return enums;
                }
            }
            return null;
        }
    }

    /**
     * 采购状态
     * 0 未采购，1 已受理 （ 已提交） 3 已采购 -1 采购失败 -2 已退单
     */
    public enum LocalOrdBuyStatus {
        /**
         * 未采购
         */
        Unpurchased(0),
        /**
         * 已受理
         */
        Accepted(1),
        /**
         * 已采购
         */
        Purchased(3),

        /**
         * 采购失败
         */
        Purchfailure(-1),

        /**
         * 退款失败
         */
        ChargebackFail(-2);


        private Integer value;

        LocalOrdBuyStatus(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
    }

    public enum OrdType {
        /**
         * 人工
         */
        Manu(0),
        /**
         * 自动
         */
        Auto(1);


        private Integer value;

        OrdType(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
    }

    public enum AliOrderStatus {
        /**
         * 订单已经确认(下单成功)
         */
        Confirm(1),
        /**
         * 订单未确认(下单失败、满房等)
         */
        NonConfirm(2),
        /**
         * 订单等待处理中(处理中)
         */
        Dealing(3),
        /**
         * 订单已取消(此值保留)
         */
        Cancel(4),
        /**
         * 已入住
         */
        CheckIn(5),
        /**
         * 订单关闭
         */
        Closed(6),
        /**
         * 订单删除
         */
        Deleted(7),
        /**
         * 客人NoShow
         */
        NoShow(8),

        /**
         * 客人离店
         */
        CheckOut(9);

        private Integer value;

        AliOrderStatus(Integer value) {
            this.value = value;
        }

        public Integer getValue() {
            return value;
        }
    }

    public enum RedisKey {
        /**
         * 店铺下RP所使用的加价配置
         */
        STORE_RP_USE_ADD_PRICE("1_store_rp_use_add_price"),

        /**
         * 店铺下RP所使用的加价配置
         */
        STORE_HTL_USE_OURPLAN("1_store_htl_use_ourplan"),

        /**
         * RP所所属酒店及房型
         */
        RP_HTL_ROOM("1_rp_blong_htl_room"),

        /**
         * 价量态所使用的key前缀
         */
        RPS_PREFIX("r");

        private String value;

        RedisKey(String value) {
            this.value = value;
        }

        public String getValue() {
            return value;
        }
    }
}
